/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Toepen.LoungeFacade;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;


/**
 * LoungeSpel representeert het Spel uit het domeinmodel in de lounge.
 * @author Bart Piggen
 */
public class LoungeSpel implements Serializable {
    private String host;
    private FacadeGebruiker spelStarter;
    private ArrayList<FacadeGebruiker> _Deelnemers=new ArrayList<FacadeGebruiker>();
    private int capaciteit;
    private int id;
    private String naam;
    private boolean _IsGestart=false;

    /**
     * Constructor voor het loungespel
     * @param host IP adres van de host
     * @param id database id van het spel
     * @param naam  naam van het spel
     * @param spelStarter   de FacadeGebruiker die het spel aangemaakt en
     * opgestart heeft
     * @param capaciteit hoeveel mensen er maximaal kunnen meedoen
     * @param aangemeld aantal aangemelde deelnemers
     */
    protected LoungeSpel(String host, int id, String naam, FacadeGebruiker spelStarter, int capaciteit, int aangemeld) {
        this.host = host;
        this.id = id;
        this.naam = naam;
        this.spelStarter = spelStarter;
        this.capaciteit = capaciteit;
    }

    /**
     * Voeg een deelnemer toe
     * @param gebruiker die deel gaat nemen
     */
    protected void addDeelnemer(FacadeGebruiker gebruiker) {
        if(_Deelnemers.size()+1<capaciteit) {
            _Deelnemers.add(gebruiker);
        }
        else
            ; //TODO Throw exception
    }

    /**
     * Verwijder de deelnemer
     * @param fac_geb gebruiker die verwijderd wordt
     */
    protected void removeDeelnemer(FacadeGebruiker fac_geb) {
        Iterator<FacadeGebruiker> iterator = _Deelnemers.iterator();
        while (iterator.hasNext())
        {
            if(iterator.next().getNaam().equals(fac_geb.getNaam()))
            {
                iterator.remove();
            }            
        }
    }

    /**
     * @return de deelnemers aan dit spel
     */
    public FacadeGebruiker[] getDeelnemers() {
        FacadeGebruiker[] retVal=new FacadeGebruiker[_Deelnemers.size()];
        _Deelnemers.toArray(retVal);
        return(retVal);
    }

    /**
     * Zet of het spel gestart is
     * @param value true als het gestart is
     */
    protected void setIsGestart(boolean value) {
        _IsGestart=value;
    }

    /**
     * @return Of het spel al gestart is
     */
    public boolean getIsGestart() {
        return(_IsGestart);
    }

    /**
     * @return het IP adres van de host
     */
    public String getHost() {
        return host;
    }

    /**
     * @return Database id van het spel
     */
    public int getId() {
        return id;
    }

    /**
     * @return de naam van het spel
     */
    public String getNaam() {
        return naam;
    }

    /**
     * @return FacadeGebruiker die het spel gestart heeft
     */
    public FacadeGebruiker getSpelStarter() {
        return spelStarter;
    }

    /**
     * @return capaciteit van dit spel
     */
    public int getCapaciteit() {
        return capaciteit;
    }

    /**
     * @return aantal aangemelde gebruikers
     */
    public int getAangemeld() {
        return _Deelnemers.size()+1;
    }

    /**
     * @return Geeft een statusregel terug waarin de naam, aantal ingelogde gebruikers
     * en de maximum capaciteit staat
     */
    @Override
    public String toString() {
        return(getAangemeld() + " van " + getCapaciteit() + " - " + getNaam());
    }
}
